package utils

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"
	"strings"
)

// GetFFMpegEnv 获取并查找FFMpeg环境变量
func GetFFMpegEnv(envDir ...string) string {
	// 获取环境变量
	if len(envDir) > 0 {
		return envDir[0]
	}
	// 获取环境变量
	dir, _, err := FindFFMpegPath()
	if err != nil {
		panic(`未安装FFMpeg工具或未设置环境变量`)
	}
	return dir
}

// FindFFMpegPath 查找FFmpeg环境变量路径
func FindFFMpegPath() (string, string, error) {
	filePath, err := FindEnvPath(`FFMPEG_PATH`, `ffprobe`)
	if err != nil {
		return ``, ``, err
	}
	dir, filename := filepath.Split(filePath)
	return dir, filename, nil
}

// FindEnvPath 尝试找到环境变量的完整路径
func FindEnvPath(envName, binary string) (string, error) {
	// 尝试从环境变量中路径
	pathEnv := os.Getenv(envName)
	if pathEnv != "" {
		return pathEnv, nil // 如果已设置，则直接返回
	}

	// 如果没有设置环境变量，则遍历PATH
	paths := strings.Split(os.Getenv("PATH"), string(os.PathListSeparator))

	// 指定平台
	if runtime.GOOS == "windows" {
		binary += ".exe"
	}

	// 迭代遍历文件
	for _, path := range paths {
		// 遍历文件
		filePath := filepath.Join(path, binary)
		if _, err := os.Stat(filePath); err == nil {
			return filePath, nil // 找到FFmpeg，返回其路径
		}
	}

	// 如果没有找到FFmpeg，返回错误
	return "", fmt.Errorf("not found in PATH")
}
